
/*
  1. promise 就是一个类 在执行这个类的时候 需要传递一个执行器进去 执行器会立即执行
  2. Promise中有三种状态 分别是 成功 fulfilled 失败 rejected 等待 pending
    pending -> fulfilled
    pending -> rejected
    一旦状态确定就不可更改
  3. resolve 和 reject 函数是用来更改状态的
    reslove :fulfilled
    reject: rejected
  4. then方法内部做的事情就判断状态 如果是成功就调用成功回调函数 如果是失败就调用失败回调函数 then是被定义在原型对象中的
  5. then成功回调有一个参数 表示成功之后的值 then失败之后有一个参数 表示失败后的原因
*/

const MyPromise = require('./myPromise')


function p1 () {
  return new MyPromise(function (resolve, reject) {
    setTimeout(() => {
      // resolve('p1 resolve')
      reject('p1 reject')
    }, 3000);
  })
}
function p2 () {
  return new MyPromise(function (resolve, reject) {
    setTimeout(() => {
      // resolve('p2 resolve')
      reject('p2 reject')
    }, 2000);
  })
}
function p3(){
  return new MyPromise(function(resolve,reject){
    setTimeout(() => {
      // resolve('p3 resolve')
      reject('p3 reject')
    }, 1000);
  })
}

// MyPromise.allSettled([p1(),p3(),p2()]).then(result=>{
//   console.log('成功');
//   console.log(result);
// },reason=>{
//   console.log('失败');
//   console.log(reason);
// })
// p1(),p3(),p2()
MyPromise.any([p1(),p3(),p2()]).then(result=>{
  console.log('成功');
  console.log(result);
},reason=>{
  console.log('失败');
  console.log(reason);
})




// MyPromise.race([p1(),p2()]).then(result => {
//   console.log(result);
// },reason => console.log(reason))
// p2()
//   .then(value => console.log(value))
//   .catch(reason => console.log(reason))


// p2().finally(()=>{
//   console.log('finally');
//   return p1()
// }).then((value)=>{
//   console.log(value);
// },(reason)=>{
//   console.log(reason);
// })

// // MyPromise.all(['a','b',p1(),p2(),'c']).then(result => console.log(result))
// MyPromise.resolve(100).then((value)=>console.log(value))
// MyPromise.resolve(p1()).then((value)=>console.log(value))









// let promise =  new MyPromise((reslove,reject)=>{
//   // setTimeout(() => {
//   //   reslove('成功...')
//   // }, 2000);
//   // throw new Error('爆出了错误')
//   // reslove('成功...')
//   reject('失败')
// })

// promise.then().then().then((value)=>console.log(value),(reason)=>console.log(reason))





// promise.then(value=>{
//   console.log(value);
//   // throw new Error('then error')
//   return 'aaa'
// },reason=>{
//   console.log(reason);
//   return 10000
// }).then((value)=>{console.log(value)},()=>{})

// p1.then(value => {
//   console.log(value);
// },reason=>{
//   console.log(reason.message);
// })

// function other(){
//   return new MyPromise((resolve,reject)=>{
//     resolve('other')
//   })
// }












// promise.then(value=>{
//   console.log(2);
//   console.log(value);
// },reason=>{
//   console.log(reason);
// })

// promise.then(value=>{
//   console.log(3);
//   console.log(value);
// },reason=>{
//   console.log(reason);
// })